home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 401_500 / DISK0417 / DISK0417.ZIP / PROLOG.ARC / SAMPLES.ARC / BICYCLE.PRO < prev    next >
Text File  |  1986-07-20  |  1KB  |  35 lines

  1. /* Describe the parts required to make a bicycle. Firt the elementary parts
  2. are given (basicpart). Then a description of various subassemblies.
  3. Ask: ?-partsof( hub, P ). to get all the basic parts required to make a hub.
  4. Ask: ?-partsof( bike, P ). for the whole bike. */
  5.  
  6.  
  7. basicpart( rim ).
  8. basicpart( rearframe ).
  9. basicpart( gears ).
  10. basicpart( nut ).
  11. basicpart( spoke ).
  12. basicpart( handles ).
  13. basicpart( bolt ).
  14. basicpart( fork ).
  15.  
  16. assembly( bike, [quant( wheel, 2 ), quant( frame, 1 )] ).
  17. assembly( wheel, [quant( spoke, 20 ), quant( rim, 1 ), quant( hub, 1)] ).
  18. assembly( frame, [quant( rearframe, 1), quant( frontframe, 1 ) ] ).
  19. assembly( frontframe, [quant( fork, 1 ), quant( handles, 1 )] ).
  20. assembly( hub, [quant( gears, 1 ), quant( axle, 1 ) ] ).
  21. assembly( axle, [quant( bolt, 1 ), quant( nut, 2) ] ).
  22.  
  23. partsof( X, [X] ) :- basicpart( X ).
  24. partsof( X, P ) :- assembly( X, Subparts ),
  25.                    partsoflist( Subparts, P ).
  26.  
  27. partsoflist( [], [] ).
  28. partsoflist( [quant( X,N ) | Tail ], Total ) :-
  29.              partsof( X, Headparts ),
  30.              partsoflist( Tail, Tailparts ),
  31.              append( Headparts, Tailparts, Total ).
  32.  
  33. append( [], L, L ).
  34. append( [X|L1], L2, [X|L3] ) :- append( L1, L2, L3 ).
  35.